const vscode = require('vscode');
const { updateDecorations, disposeDecorations } = require('./decorationManager');
const { registerEzOneLinkProvider, registerShowEzOneOptions } = require('./linkProvider');
const { registerEzOneCodeActionsProvider } = require('./codeActionsProvider');
const { registerEzOneStateCommands } = require('./ezOneCommands'); // 引入新的命令注册函数

let refreshIntervalId; // 用于存储定时器的ID，以便在停用时清除

/**
 * 激活扩展时调用的函数
 * @param {vscode.ExtensionContext} context
 */
function activate(context) {
    // 立即更新一次装饰器
    updateDecorations();

    // 每分钟刷新一次装饰器
    refreshIntervalId = setInterval(() => {
        if (vscode.window.activeTextEditor) {
            updateDecorations();
        }
    }, 60 * 1000);

    // 将定时器清理函数添加到订阅中，确保在扩展停用时被清除
    context.subscriptions.push({
        dispose: () => clearInterval(refreshIntervalId)
    });

    // 注册事件监听器
    context.subscriptions.push(
        vscode.workspace.onDidChangeTextDocument(event => {
            if (vscode.window.activeTextEditor && event.document === vscode.window.activeTextEditor.document) {
                updateDecorations();
            }
        }),
        vscode.window.onDidChangeActiveTextEditor(() => {
            updateDecorations();
        }),
        vscode.workspace.onDidSaveTextDocument(document => {
            if (vscode.window.activeTextEditor && document === vscode.window.activeTextEditor.document) {
                updateDecorations();
            }
        })
    );

    // 注册文档链接提供者
    context.subscriptions.push(registerEzOneLinkProvider());

    // 注册处理 ezOne 选项的命令（如果 `registerShowEzOneOptions` 不注册命令，这行可能只是用于注册其他的 UI 交互）
    context.subscriptions.push(registerShowEzOneOptions());

    // 注册 ezOne 代码操作提供者
    context.subscriptions.push(registerEzOneCodeActionsProvider());

    // --- 新增：注册 ezOne 状态相关的命令 ---
    // 将 updateDecorations 传递给命令处理函数，以便它们在修改文档后可以调用
    context.subscriptions.push(...registerEzOneStateCommands(updateDecorations));
}

/**
 * 停用扩展时调用的函数（清理资源）
 */
function deactivate() {
    disposeDecorations();
    if (refreshIntervalId) {
        clearInterval(refreshIntervalId);
    }
}

// 导出 activate 和 deactivate 函数
module.exports = {
    activate,
    deactivate
};